package org.example.test.controller;

import org.example.test.model.CommentsModel;
import org.example.test.response.CommonResponse;
import org.example.test.response.ResponseBuilder;
import org.example.test.service.CommentsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 评论控制器
 * 提供评论的增删查相关接口
 */
@RestController
@RequestMapping("/comment")
public class CommentsController {
    // 日志记录器
    private static final Logger LOGGER = LoggerFactory.getLogger(CommentsController.class);

    @Autowired
    private CommentsService commentsService;  // 评论服务

    /**
     * 创建评论接口
     * @param commentRequest 评论请求模型
     * @return 返回操作结果
     */
    @PostMapping("/create")
    public CommonResponse createComment(@RequestBody CommentsModel commentRequest) {
        try {
            LOGGER.info("创建评论请求: {}", commentRequest);
            commentsService.createComment(commentRequest);  // 调用服务层创建评论
            return ResponseBuilder.success();  // 返回成功响应
        } catch (Exception e) {
            LOGGER.error("创建评论失败", e);  // 记录错误日志
            return ResponseBuilder.error(e.getMessage());  // 返回错误响应
        }
    }

    /**
     * 删除评论接口
     * @param commentId 评论ID
     * @return 返回操作结果
     */
    @DeleteMapping("/delete")
    public CommonResponse deleteComment(@RequestParam Long commentId) {
        try {
            LOGGER.info("删除评论请求 - 评论ID: {}", commentId);
            commentsService.deleteComment(commentId);  // 调用服务层删除评论
            return ResponseBuilder.success();  // 返回成功响应
        } catch (Exception e) {
            LOGGER.error("删除评论失败", e);  // 记录错误日志
            return ResponseBuilder.error(e.getMessage());  // 返回错误响应
        }
    }

    /**
     * 获取单个评论接口
     * @param commentId 评论ID
     * @return 返回评论详情
     */
    @GetMapping("/get")
    public CommonResponse getComment(@RequestParam Long commentId) {
        try {
            LOGGER.info("获取评论请求 - 评论ID: {}", commentId);
            CommentsModel comment = commentsService.getCommentById(commentId);  // 调用服务层获取评论
            return ResponseBuilder.success(comment);  // 返回成功响应
        } catch (Exception e) {
            LOGGER.error("获取评论失败", e);  // 记录错误日志
            return ResponseBuilder.error(e.getMessage());  // 返回错误响应
        }
    }

    /**
     * 获取用户评论列表接口
     * @param userId 用户ID
     * @return 返回用户评论列表
     */
    @GetMapping("/listByUser")
    public CommonResponse listCommentsByUser(@RequestParam("userId") Long userId) {
        try {
            LOGGER.info("获取用户评论列表请求 - 用户ID: {}", userId);
            List<CommentsModel> comments = commentsService.listCommentsByUser(userId);  // 调用服务层获取用户评论
            return ResponseBuilder.success(comments);  // 返回成功响应
        } catch (Exception e) {
            LOGGER.error("获取用户评论列表失败", e);  // 记录错误日志
            return ResponseBuilder.error(e.getMessage());  // 返回错误响应
        }
    }

    /**
     * 获取商品评论列表接口
     * @param productId 商品ID
     * @return 返回商品评论列表
     */
    @GetMapping("/listByProduct")
    public CommonResponse listCommentsByProduct(@RequestParam("productId") Long productId) {
        try {
            LOGGER.info("获取商品评论列表请求 - 商品ID: {}", productId);
            List<CommentsModel> comments = commentsService.listCommentsByProduct(productId);  // 调用服务层获取商品评论
            return ResponseBuilder.success(comments);  // 返回成功响应
        } catch (Exception e) {
            LOGGER.error("获取商品评论列表失败", e);  // 记录错误日志
            return ResponseBuilder.error(e.getMessage());  // 返回错误响应
        }
    }
}